#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
设备表更新脚本（MySQL版本） - 添加设备状态字段
运行此脚本以更新MySQL数据库表结构，支持设备状态数据
"""

import os
import sys
import pymysql
from datetime import datetime

# 添加项目根目录到搜索路径，以便导入应用模块
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

def update_device_table_mysql():
    """更新MySQL设备表结构，添加新字段"""
    print("开始更新MySQL设备表结构...")
    
    # 从配置文件中获取数据库连接信息
    try:
        from app.config import Config
        mysql_host = Config.MYSQL_HOST
        mysql_port = Config.MYSQL_PORT
        mysql_user = Config.MYSQL_USER
        mysql_pass = Config.MYSQL_PASSWORD
        mysql_db = Config.MYSQL_DB
    except ImportError:
        # 如果无法导入配置，使用默认值
        print("警告：无法导入配置文件，使用默认数据库连接参数")
        mysql_host = 'localhost'
        mysql_port = 3306
        mysql_user = 'test2'
        mysql_pass = '123456'
        mysql_db = 'test2'
    
    try:
        # 连接到MySQL数据库
        connection = pymysql.connect(
            host=mysql_host,
            port=mysql_port,
            user=mysql_user,
            password=mysql_pass,
            database=mysql_db
        )
        
        with connection.cursor() as cursor:
            # 检查设备表是否存在
            cursor.execute("SHOW TABLES LIKE 'devices'")
            if not cursor.fetchone():
                print("错误：设备表不存在！")
                return False
                
            # 检查是否已存在这些字段
            cursor.execute("SHOW COLUMNS FROM devices")
            columns = [column[0] for column in cursor.fetchall()]
            
            # 需要添加的新字段
            new_columns = {
                'battery_level': "FLOAT DEFAULT 100.0 COMMENT '设备电池电量百分比'",
                'work_mode': "VARCHAR(20) DEFAULT '自动' COMMENT '设备工作模式'",
                'device_health': "FLOAT DEFAULT 100.0 COMMENT '设备健康状态百分比'",
                'last_active': "TIMESTAMP NULL COMMENT '设备最后活跃时间'"
            }
            
            # 添加缺失的字段
            added_columns = []
            for column, definition in new_columns.items():
                if column not in columns:
                    print(f"添加字段: {column}")
                    cursor.execute(f"ALTER TABLE devices ADD COLUMN {column} {definition}")
                    added_columns.append(column)
            
            # 如果添加了新字段，则更新现有记录的初始值
            if 'last_active' in added_columns:
                current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                cursor.execute(f"UPDATE devices SET last_active = '{current_time}' WHERE last_active IS NULL")
            
            # 提交更改
            connection.commit()
            
            if added_columns:
                print(f"成功添加字段: {', '.join(added_columns)}")
            else:
                print("所有需要的字段已存在，无需更新")
                
            # 确认字段已添加
            cursor.execute("SHOW COLUMNS FROM devices")
            updated_columns = [column[0] for column in cursor.fetchall()]
            for column in new_columns.keys():
                if column in updated_columns:
                    print(f"确认字段 {column} 已存在")
                else:
                    print(f"警告：字段 {column} 添加失败")
                    
        print("设备表结构更新完成")
        return True
        
    except Exception as e:
        print(f"更新数据库时出错: {str(e)}")
        return False
        
def main():
    """主函数"""
    print("MySQL设备表更新脚本启动...")
    success = update_device_table_mysql()
    
    if success:
        print("脚本执行成功！")
    else:
        print("脚本执行失败！")
        
    return 0 if success else 1
    
if __name__ == "__main__":
    sys.exit(main())
